{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 基于病理数据进行乳腺癌预测(复发4/正常2)，使用Logistic算法构建模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- [LogisticRegressionCV 官方文档](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegressionCV.html#sklearn.linear_model.LogisticRegressionCV)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import warnings\n",
    "import sklearn\n",
    "from sklearn.linear_model import LogisticRegressionCV,LinearRegression\n",
    "from sklearn.linear_model.coordinate_descent import ConvergenceWarning\n",
    "from sklearn.cross_validation import train_test_split\n",
    "from sklearn.preprocessing import StandardScaler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 设置字符集，防止中文乱码\n",
    "mpl.rcParams['font.sans-serif']=[u'simHei']\n",
    "mpl.rcParams['axes.unicode_minus']=False\n",
    "\n",
    "# 拦截异常，忽略那些影响美观但是不影响运行的警告信息\n",
    "warnings.filterwarnings(action = 'ignore', category=ConvergenceWarning)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>Clump Thickness</th>\n",
       "      <th>Uniformity of Cell Size</th>\n",
       "      <th>Uniformity of Cell Shape</th>\n",
       "      <th>Marginal Adhesion</th>\n",
       "      <th>Single Epithelial Cell Size</th>\n",
       "      <th>Bare Nuclei</th>\n",
       "      <th>Bland Chromatin</th>\n",
       "      <th>Normal Nucleoli</th>\n",
       "      <th>Mitoses</th>\n",
       "      <th>Class</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1000025</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1002945</td>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>10</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1015425</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1016277</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1017023</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        id  Clump Thickness  Uniformity of Cell Size  \\\n",
       "0  1000025                5                        1   \n",
       "1  1002945                5                        4   \n",
       "2  1015425                3                        1   \n",
       "3  1016277                6                        8   \n",
       "4  1017023                4                        1   \n",
       "\n",
       "   Uniformity of Cell Shape  Marginal Adhesion  Single Epithelial Cell Size  \\\n",
       "0                         1                  1                            2   \n",
       "1                         4                  5                            7   \n",
       "2                         1                  1                            2   \n",
       "3                         8                  1                            3   \n",
       "4                         1                  3                            2   \n",
       "\n",
       "  Bare Nuclei  Bland Chromatin  Normal Nucleoli  Mitoses  Class  \n",
       "0           1                3                1        1      2  \n",
       "1          10                3                2        1      2  \n",
       "2           2                3                1        1      2  \n",
       "3           4                3                7        1      2  \n",
       "4           1                3                1        1      2  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 数据读取并处理异常数据\n",
    "path = \"datas/breast-cancer-wisconsin.data\"\n",
    "names = ['id','Clump Thickness','Uniformity of Cell Size','Uniformity of Cell Shape',\n",
    "         'Marginal Adhesion','Single Epithelial Cell Size','Bare Nuclei',\n",
    "        'Bland Chromatin','Normal Nucleoli','Mitoses','Class']\n",
    "\n",
    "df = pd.read_csv(path, header=None,names=names)\n",
    "\n",
    "datas = df.replace('?', np.nan).dropna(how = 'any') # 只要有列为空，就进行删除操作\n",
    "datas.head(5) ## 显示一下"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# 1. 数据提取以及数据分隔\n",
    "# 提取\n",
    "X = datas[names[1:10]]\n",
    "Y = datas[names[10]]\n",
    "\n",
    "# 分隔\n",
    "X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.1,random_state=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# 2. 数据格式化(归一化)\n",
    "ss = StandardScaler()\n",
    "X_train = ss.fit_transform(X_train) ## 训练模型及归一化数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=array([  1.00000e-02,   1.62378e-02,   2.63665e-02,   4.28133e-02,\n",
       "         6.95193e-02,   1.12884e-01,   1.83298e-01,   2.97635e-01,\n",
       "         4.83293e-01,   7.84760e-01,   1.27427e+00,   2.06914e+00,\n",
       "         3.35982e+00,   5.45559e+00,   8.85867e+00,   1.43845e+01,\n",
       "         2.33572e+01,   3.79269e+01,   6.15848e+01,   1.00000e+02]),\n",
       "           class_weight=None, cv=2, dual=False, fit_intercept=True,\n",
       "           intercept_scaling=1.0, max_iter=100, multi_class='ovr',\n",
       "           n_jobs=1, penalty='l2', random_state=None, refit=True,\n",
       "           scoring=None, solver='lbfgs', tol=0.01, verbose=0)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 3. 模型构建及训练\n",
    "\n",
    "# penalty（惩罚）：指定惩罚中使用的标准，值为l1或者l2正则\n",
    "## 当penalty为L1的时候，参数只能是：liblinear(坐标轴下降法)；因为lbfgs和cg都是关于目标函数的二阶泰勒展开，要求二阶导，但是L1只有一阶导\n",
    "## 当penalty为L2的时候，参数可以是：lbfgs(拟牛顿法，用的最多的)、newton-cg(牛顿法变种)、seg(minbatch 小批量梯度下降，一般很少用) \n",
    "## PS：但维度<10000时，优先选lbfgs; 维度>10000时，用cg更好更快。当显卡计算的时候，lbfgs和cg都比seg快\n",
    "\n",
    "# solver: 对应penalty惩罚下的优化方式，默认：lbfgs\n",
    "# tol：容忍停止标准，设置一个下限，防止过拟合\n",
    "# cv：整数或交叉验证生成器，一般五折或者十折，这里数据太少，用个二折测试下\n",
    "# Cs: 每个值描述正则化强度的倒数。如果Cs是一个整数，则在1e-4和1e4之间选择一个Cs值的对数格。就像在支持向量机中一样，较小的值指定更强的正则化。\n",
    "\n",
    "# multi_class: 分类方式参数；参数可选: ovr(默认)、multinomial；这两种方式在二元分类问题中，效果是一样的；在多元分类问题中，效果不一样\n",
    "## ovr: one-vs-rest， 对于多元分类的问题，先将其看做二元分类，分类完成后，再迭代对其中一类继续进行二元分类\n",
    "## multinomial: many-vs-many（MVM）,对于多元分类问题，如果模型有T类，我们每次在所有的T类样本里面选择两类样本出来，\n",
    "## 不妨记为T1类和T2类，把所有的输出为T1和T2的样本放在一起，把T1作为正例，T2作为负例，\n",
    "## 进行二元逻辑回归，得到模型参数。我们一共需要T(T-1)/2次分类\n",
    "\n",
    "## class_weight: 特征权重参数\n",
    "\n",
    "# lr的简称一般代表逻辑回归，不代表线性回归\n",
    "lr = LogisticRegressionCV(fit_intercept=True, Cs=np.logspace(-2, 2, 20), cv=2, penalty='l2', solver='lbfgs', tol=0.01)\n",
    "lr.fit(X_train, Y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R值（准确率）： 0.970684039088\n",
      "稀疏化特征比率：0.00%\n",
      "参数： [[ 1.3926311   0.17397478  0.65749877  0.8929026   0.36507062  1.36092964\n",
      "   0.91444624  0.63198866  0.75459326]]\n",
      "截距： [-1.02717163]\n"
     ]
    }
   ],
   "source": [
    "# 4. 模型效果获取\n",
    "r = lr.score(X_train, Y_train)\n",
    "print(\"R值（准确率）：\", r)\n",
    "# 稀疏化特征比率 就是看稀疏解，0多不多\n",
    "print(\"稀疏化特征比率：%.2f%%\" % (np.mean(lr.coef_.ravel() == 0) * 100))\n",
    "print(\"参数：\",lr.coef_)\n",
    "print(\"截距：\",lr.intercept_)\n",
    "# sigmoid函数的概率，返回的是P?\n",
    "# print(re.predict_proba(X_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['lr.model']"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 5. 模型相关信息保存\n",
    "## 引入包\n",
    "from sklearn.externals import joblib\n",
    "## 要求文件夹必须存在\n",
    "joblib.dump(ss, \"ss.model\") ## 将标准化模型保存\n",
    "joblib.dump(lr, \"lr.model\") ## 将模型保存"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# 模型加载\n",
    "## 引入包\n",
    "from sklearn.externals import joblib\n",
    "oss = joblib.load(\"ss.model\")\n",
    "olr = joblib.load(\"lr.model\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# 数据预测\n",
    "## a. 预测数据格式化(归一化)\n",
    "X_test = oss.transform(X_test) # 使用模型进行归一化操作\n",
    "## b. 结果数据预测\n",
    "Y_predict = olr.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n8ODB6NevH86cOQMA2Lhxo/Q3AAQFBeHPP//E9evXsWnTJgwdOhTXr19HQkICtFptgfGsXbsW1apV\nw6uvvoo6depgy5YtUn3r16/HmjVrsH379mK1kYiIiIjIklhkAnQg4QBSs1OLTH7yCQikZqfit4Tf\nirWftm3bYurUqWjQoAFWrVqFUaNG4ddff4WPjw9++uknREZGwsfHB05OTti7dy9q1KgBuVyOefPm\n4bXXXkNycjI6d+4MW1tb2NjkfRQJCQlQKpVQqVSIiIjA77//jkePHmHHjh2IiIhAdnZ2gfHExsZi\n1qxZOHfuHH744QdMmDBBb/3cuXMxZsyYQts0bNgw+Pn5Ye7cuQWWuXbtGrp37462bdti4sSJAIC0\ntDR069YNbdu2xahRo/TKjx49Gr/++muh+yUiIiIiehYsMgH68uiXSNcUPOTMmHRNOhYdXVTsfTk6\nOuLEiRN46623cPz4cbRo0QKenp4YNWoUmjZtCgA4fvw4jh49irp16wIARo0ahf/++w8KhQJ2dnZ6\n9U2bNg2NGjVCx44dsXfvXpw5cwYXL15EZGQkfH194ezsXGAs//zzDxo0aAAA8PLykuoWQmDq1Kno\n2rUrmjdvDgAYOXIk/P39pdecOXOwa9cu6HQ6HDt2DHfu3EF8fLzR/UydOhWff/45jhw5gsTERERF\nRSE8PBwDBw7EkSNHkJ6eLj2F98iRI0hKSkLPnj2L3bdERERERKXNIidBOJ54/Jls9/3332PdunUQ\nQsDf3x9vvPEGunXrBicnJ7z++utITEwEADRp0gSfffYZGjZsCACQy+VwcXExqC8iIgLnzp2Dl5cX\nbGxskJmZifDwcADAnj179O4TMiY2NhYNGjSAEAKrVq3CvHnzAAArV67E77//jocPH+LKlSsYNWoU\n1q5da7D9Rx99hL59+wIAAgICEB0djXr16hmUu3z5spRIVa1aFQ8fPoSbmxsuXbqE//77D7du3UKt\nWrWQk5ODkJAQdOvWDT///DN69eplatcSEREREZUJi7wCpNKqii5khFqnLlb5/v37IyoqCq6urmjR\nogVeeOEFAEBSUhLc3d2lcs7Ozvj111/h5eUFIQRycnJga2sLIfSH6DVp0gShoaHS++zsbFy5cgVX\nrlzB/fv3C43l1q1bSE9PR7du3VC1alVER0dj8ODBAPISm7///htr1qwxGJ72uMzMTLz44osAABcX\nF9y7d89oubfffhuzZ8/Gr7/+iv379yMwMBBt2rRBfHw8VqxYgYYNG6JSpUrYsmULGjdujClTpuDk\nyZNYuXJloW0gIiIiIiprFnkFyN7WHtnagu+VKYhSrixW+fz7dgBgwYIFOH36NK5evSpdAXk8wfn5\n559x+fJl2Nra4tGjR3B2dpaSoXyNGzdGVlaW9P7u3bvYsGEDgLykqlOnTgXGEhsbi3bt2uGPP/5A\nWloaXn75Zfz111/w8/MzWn7kyJG4dOmS9D4gIABOTk7SPUYZGRl6M9o97rPPPkN0dDQWL16M999/\nH05OThg5ciTWrFkDFxcXLF26FJs2bcI///yDESNGoFq1ahg4cCCmT5+ODz/8sLAuJSIiIiIqUxaZ\nALWq0QqHrh8q0XYlJZfL4ejoCE9PT/z5559QKpV4/fXXAQC5ublYsWIFduzYgbNnz2LXrl24du0a\nQkJCkJubi+joaKN1uru7IygoCABw8uTJQvf/zz//wNvbGwBQqVIlBAcHY8+ePQUmQMaGwG3ZsgXR\n0dFo1aoVzp07J91PZEyzZs1w8+ZN/PDDDwCArKwsxMbGolWrVjhx4gQ6duyIunXr4urVqwCAmJgY\neHp6FtoGIiIiIqKyZpFD4Ka0ngInO6dibeNk54SpracWe19CCOlKT5MmTZCeno7AwEAMGjQIgYGB\nAIANGzbAz88Pzs7OmDFjBmbNmgV7e3usWbMGDRo0wMWLFyGXy6X6cnNzodPpULFiRbRp0wZt2rRB\n/fp5D2rV6XS4ffs2Pv74Y704YmNjpQQIAHr27Im9e/cWqy1BQUEIDw/HhAkT8OOPP6J79+64cOEC\nPvvsM4OyixcvxoQJE+Do6AgA+PTTTzFixAhUrFgRqamp6N+/P4YNG4ZDhw6hXbt2WL16NSZNmlSs\neIiIiIiISptMPHkjynPIx8dHmlUsX1xcHBo1amS0fK7IxUvLX8LNhzdNmgpbBhlqVayFq+OuwkZm\nek6o0Wjg5+eH/v37Y9y4cRg7diyEEFi9ejWys7PRt29fzJ07Fy+//DKysrKQkpKCCxcuoGfPntBo\nNLh79y4ePHiAP/74A+PGjYNSqUR0dDQ2btyI27dvQ6FQ6O1PCIFBgwbhnXfewapVqzBu3DiTYzVV\nWloafvvtN7Rr1w7VqlUr9fqNKeyzJCIiIiIyhbGcwRiLTIAA4HLKZbRY36LIh6HKIIOL0gUnQ06i\nvlv9p4rz9u3b0iQCQN6wMKVSKV3dKS06nQ45OTmwt7cv1XrNhQkQERERET0tUxMgixwCBwD13erj\nZMhJ1KpYC852xp+d42znjFoVa5VK8gNAL/kB8p4RVNrJD5B3v5GlJD9ERERERM+SxSZAQF4SdHXc\nVUS8E4EOtTvAwdYBNjIbONg6oEPtDoh4JwJXx10tleSHiIiIiIiefxY5C9zjbGQ26FK3C7rU7WLu\nUIiIiIiIyMzK9RWgcnD7EhWBnyERERERPUvlNgGyt7dHSkoKf0CXY0IIpKSk8H4mIiIiInpmyu0Q\nuBo1aiAxMREPHjwwdyj0FOzt7VGjRg1zh0FEREREVqLcJkAKhQJeXl7mDoOIiIiIiMqRcjsEjoiI\niIiIqLiYABERERERkdVgAkRERERERFaDCRAREREREVkNJkBERERERGQ1mAAREREREZHVYAJERERE\nRERWgwkQERERERFZDSZARERERERkNZgAERERERGR1WACREREREREVoMJEBERERERWQ0mQERERERE\nZDWYABERERERkdVgAkRERERERFaDCRAREREREVkNJkBERERERGQ1zJIAabVa1KpVC/7+/vD390ds\nbKw5wiAiIiIiIitja46d/vPPP+jfvz8WLVpkjt0TEREREZGVMssVoOPHj2P37t1o06YNBgwYAK1W\na1Bm3bp18PHxgY+PDx48eGCGKImIiIiIyNKYJQHy9fXF4cOHER0dDVdXV+zdu9egzIgRIxATE4OY\nmBhUqVLFDFESEREREZGlMcsQuKZNm0KpVAIAGjZsiPj4eHOEQUREREREVsYsV4AGDRqEc+fOQafT\nYffu3Xj11VfNEQYREREREVkZs1wBmjFjBoKDgyGEwJtvvomOHTuaIwwiIiIiIrIyZkmAXn75Zfzz\nzz/m2DUREREREVkxPgiViIiIiIisBhMgIiIiIiKyGkyAiIiIiIjIajABIiIiIiIiq8EEiIiIiIiI\nrAYTICIiIiIishpMgIiIiIiIyGowASIiIiIiIqvBBIiIiIiIiKwGEyAiIiIiIrIaTICIiIiIiMhq\nMAEiIiIiIiKrwQSIiIiIiIisBhMgIiIiIiKyGkyAiIiIiIjIajABIiIiIiIiq8EEiIiIiIiIrAYT\nICIiIiIishpMgIiIiIiIyGowASIiIiIiIqvBBIiIiIiIiKwGEyAiIiIiIrIaTICIiIiIiMhqMAEi\n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\nRERERERWgwkQERERERFZDSZARERERERkNZgAERERERGR1WACREREREREVoMJEBERERERWQ0mQERE\nREREZDWYABERERERkdVgAkRERERERFaDCRAREREREVkNJkBERERERGQ1mAAREREREZHVKLMEKCsr\nC2fOnCmr6omIiIiIiIrNtrCVN2/exLVr16BUKmFjY5gryeVy1KhRAx4eHgbrLl26hFatWkGtVpde\ntERERERERE+h0ATohx9+wKefflpoBXK5HN999x06duyIvXv3YtCgQQAApVIJOzu70ouUiIiIiIjo\nKRU6BG706NG4c+cO0tLSkJ6ebvBKSkpCw4YNsXHjRty+fRvDhw+XtpXL5VAoFGXeACIiIiIiIlMV\negXI2dkZzs7OBa6vUKEC3nrrLTRv3hx2dnZMeIiIiIiI6LlWaAIEAHPmzMH69ev1kpucnBxkZWUh\nJSUFc+bMAZB3zw+HvBERERER0fOsyAQoMDAQVatWNUiAOLkBERERERGVN0UmQLa2tujbty8qV64M\nAHjjjTcwYMAAjBo1qsyDIyIiIiIiKk1FJkAjR47E8uXL0b59ewBAYmIiMjMz9cqMGjUK0dHRyMjI\nQIsWLQAAKpWqDMIlIiIiIiIquSITIIVCgeDgYCiVSgDAnTt3MGPGDCxatAhqtRoqlQrLly+Hvb09\nrl27hj59+gAAHjx4gI0bN5Zt9ERERERERMVQZAIEAL1790bt2rUhhEBoaChat24NX19faLVaZGVl\nYdCgQfD19cWWLVswdepUAHmTIjABIiIiIiKi54lJCVD//v3h5+cHAPj+++/RpUsXDB06VK+MTCYr\n/eiIiIiIiIhKkUkJ0JEjR5CRkQGlUomMjAz8999/BmWEEBBClHqAREREREREpcXGlEJz5szBm2++\niYCAACQkJGDy5Ml44YUX8Omnn0rJkEajgUajKdNgiYiIiIiInkaRV4CEENizZw/8/f0BAE2bNkWX\nLl0gl8uxcuVKbN++Hf/3f//HBIiIiIiIiJ57RV4B0ul0elNa5+TkwMvLCwsXLkRUVBSSk5PRs2dP\nNGvWDFevXtXbTqfTlU3UREREREREJVDkFaAzZ87ovXdzc5OmxPbx8cH8+fPRvHlz2NraombNmlI5\nmUyGl156qZTDJSIiIiIiKjmZKAczF/j4+CAmJsbcYRARERER0XPK1JzBpEkQiIiIiIiILIHJCZBa\n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\np0+rZ8+e2r59u26++eYr6rj0uZ/g4GC1aNFCZWVlmjZtmsaOHatVq1ZpzJgx2rhxY4PGFhERrEqq\nVQAAButJREFUocLCQre2DQsLa1DbAADzIAABANxSVlamMWPGaMeOHdq4caNuv/12SVJsbKyefvpp\nLV682HV3tJycHI0YMULl5eUqLCx0hZ/abN26VXPmzNHo0aPlcDhcZ2L8/Pxcl76VlZXJ6XSqrKxM\nrVq1UmRkpObNm6devXpp3759WrVqlRYsWCBJOnv2rHr06OH2uD799FMFBgYqMDDQ7c/2nD59Wna7\nXQ6Ho0Y4AwCYm81Z24MTAACoxdatW9W2bVv17dtXzz//vPLz8zVr1iy1adNGmzdv1tixYxUfH6+O\nHTtq3bp1Onr0qLp166YjR46oa9euV7T13HPPae7cuQoPD1dKSory8vL0zDPP1FvD559/rn79+kmq\nvjlCv379tHLlStcldxEREcrPz5e/v78cDoek6jBlt9vl7+8vp9Opjh076vvvv5ckBQQEKCgoSEFB\nQfLz81NxcbEqKyvVunXrOuuoqqpSeHi4jh492uD9CAAwDmeAAABua9++vSorK/XVV19p4cKFmjhx\nos6ePauzZ8/K6XTqL3/5i/r06aOZM2fK6XRq7969Cg8Pd10OV1lZqf/+7//WkiVLlJWVpYiICH3z\nzTdq06aNkpOTdc8997huNV1SUqLu3btr165dio6Odp0BioyMlFR9Od6UKVOUmJioIUOGqKqqSvv3\n71d+fr4k6dtvv9WaNWuUm5urv//972rbtq3S09P1xRdfuM4WSdVB5nJ33HGHWrdurXXr1jXBHgUA\nNDUCEADAbRMnTtSBAwdUVVWliooKrVu3TuvWrVNxcbHCwsJ08uRJFRQUaOLEicrKytLOnTsVGxvr\nurTM6XTqmWee0a233qrRo0fr1VdfVZs2bSRVX7rWuXNndejQQZJUVFQkSWrbtq3re5ebMmWK/vWv\nf6lXr15auXKlevfurX79+ikyMlKnTp2qcxy13QZbkkpLS7V9+3YtWbLkqneCk2o+wwgA4Du4BA4A\n0GC33Xab4uLitGjRIklSTEyMbrvtNi1ZskSSdPfddyskJES7du3SjBkzNGPGDNfv5ufnq23btlq+\nfLnmzZun3NxcSVJcXJzuvfdeLV26VEePHq3xeRy73a5t27YpISFBkjR//nydOXNGv/zlLxUdHS2H\nw6GEhAS98MILSk5OrvMSuF69eumrr76qMa7169e7dRe4ZcuW6U9/+lPDdxwAwHCcAQIANMjmzZv1\n8ccfa+DAgdq2bZtOnTqlnJwcvf32265t/vznP2v48OEKDg7WhAkTrvj9tm3b1mizvLxcn332mebN\nm6eWLVtqxYoVmjRp0hXb2Gy2Kx6E+uSTT7q+Lisr0/bt2zVu3DhNmDBBycnJNS6BCw8P13vvvacv\nv/xSixcvrnVso0aNqvPsUVZWlu655x717Nmzzn0EADAvAhAAoEFuv/12/fOf/9TWrVs1YcIEHTt2\nTJ06ddKOHTt07733yt/fX+3bt5e/v7/atm0ru91eb5vZ2dlyOp0aOHBgnXdiu/SQ04qKCu3fv1+f\nfPKJ0tPTlZ6erlatWunEiROuO9FJksPhcPVfXl6uysrKOusICQlRSEjIVX9+6TbZN954Y71jAgCY\nU/2PywYA4DLh4eEaN26cfvOb36iyslL333+/HnzwQT366KP6+uuv9dZbb2nQoEEaP368JGnQoEE6\nceJEjXYqKipcYWfNmjUaNGiQWrVqJan6Bgjnzp274t/lPvzwQ/Xt21cPPfSQSkpKtHTpUu3du9d1\nqdsl5eXlrttqN2vWTA6Ho8ZNDxoiKytLN9xwg+tGDAAA38MZIACA206cOKF3331Xq1at0ldffaXn\nn39e06dPl81mU2JiombPnq1NmzZpzpw5mjVrlnJycjR06FD17dtXCxcu1OTJk3Xy5En913/9l95+\n+21FRERo//79WrlypZYvXy6p+rM+06dP1/Tp02v0fym8DBkyRH/605+UnJys7t27X7HNxYsXXV+n\npKTo0kddz58/r5SUFC1btkydOnVya7ybNm3S7t275efnp/z8fK1atUpjx45t1L4DAJgDAQgA4LYP\nP/xQ8+fP1+TJk/XOO+8oLCzM9bP09HT98MMP+uSTTzRgwABJUp8+ffTZZ59p8uTJ6t27t6Tq5/Ss\nW7dOffr00V/+8he1bt1aycnJSkxMlFT9eZ6VK1fW+hmgS2dzAgMDtWzZslprvDwABQRc+Weuc+fO\nKi8v1yOPPOLWeG+44QalpKSoZcuWioqK0n333af58+e79bsAAHPiLnAAAFO5cOGCmjdvrsDAQI+3\nXVlZKT8/P/n7+7v9OyUlJWrRooXHawEAGIMABAAAAMAyuAkCAAAAAMsgAAEAAACwDAIQAAAAAMsg\nAAEAAACwjP8P7v9lS/SkjPQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc03b898>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## c. 图表展示\n",
    "x_len = range(len(X_test))\n",
    "plt.figure(figsize=(14,7), facecolor='w')\n",
    "plt.ylim(0,6)\n",
    "plt.plot(x_len, Y_test, 'ro',markersize = 8, zorder=3, label=u'真实值')\n",
    "plt.plot(x_len, Y_predict, 'go', markersize = 14, zorder=2, label=u'预测值,$R^2$=%.3f' % olr.score(X_test, Y_test))\n",
    "plt.legend(loc = 'upper left')\n",
    "plt.xlabel(u'数据编号', fontsize=18)\n",
    "plt.ylabel(u'乳腺癌类型', fontsize=18)\n",
    "plt.title(u'Logistic回归算法对数据进行分类', fontsize=20)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "115    2\n",
      "392    2\n",
      "316    4\n",
      "519    4\n",
      "313    2\n",
      "505    2\n",
      "77     2\n",
      "506    4\n",
      "485    2\n",
      "573    2\n",
      "14     4\n",
      "161    2\n",
      "187    4\n",
      "533    2\n",
      "584    2\n",
      "148    2\n",
      "237    4\n",
      "253    4\n",
      "344    4\n",
      "70     2\n",
      "199    2\n",
      "81     2\n",
      "146    4\n",
      "554    2\n",
      "329    4\n",
      "467    4\n",
      "542    2\n",
      "8      2\n",
      "512    2\n",
      "32     4\n",
      "      ..\n",
      "124    4\n",
      "78     2\n",
      "243    2\n",
      "394    2\n",
      "548    2\n",
      "504    2\n",
      "694    2\n",
      "250    2\n",
      "456    4\n",
      "557    2\n",
      "609    2\n",
      "206    4\n",
      "406    2\n",
      "52     4\n",
      "624    2\n",
      "423    2\n",
      "650    2\n",
      "251    4\n",
      "1      2\n",
      "418    2\n",
      "435    4\n",
      "171    2\n",
      "443    2\n",
      "242    2\n",
      "583    2\n",
      "162    2\n",
      "193    2\n",
      "341    2\n",
      "280    2\n",
      "38     4\n",
      "Name: Class, dtype: int64\n",
      "[2 2 4 4 2 2 2 4 2 2 4 2 4 2 2 2 4 4 4 2 2 2 4 2 4 4 2 2 2 4 2 4 4 2 2 2 4\n",
      " 4 2 4 2 2 2 2 2 2 2 4 2 2 4 2 4 2 2 2 4 4 2 4 2 2 2 2 2 2 2 2 4]\n"
     ]
    }
   ],
   "source": [
    "print(Y_test)\n",
    "print(Y_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [conda root]",
   "language": "python",
   "name": "conda-root-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
